package br.unicamp.ic.sgct.server.dominio.servicos;

import it.biobytes.ammentos.Ammentos;
import it.biobytes.ammentos.PersistenceException;
import it.biobytes.ammentos.query.Query;
import it.biobytes.ammentos.query.SqlQueryFilter;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import br.unicamp.ic.sgct.client.aplicacao.ucs.conferencia.ConferenciaService;
import br.unicamp.ic.sgct.client.dominio.exception.InfraException;
import br.unicamp.ic.sgct.client.dominio.to.ConferenciaTO;
import br.unicamp.ic.sgct.client.dominio.to.SessoesConferenciaTO;
import br.unicamp.ic.sgct.server.dominio.entidades.Conferencia;
import br.unicamp.ic.sgct.server.recursos.persistencia.AmmentosConnection;

import com.google.gwt.user.server.rpc.RemoteServiceServlet;

@SuppressWarnings("serial")
public class ConferenciaServiceImpl extends RemoteServiceServlet implements
		ConferenciaService {

	private static SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");

	/**
	 * 
	 */
	public List<ConferenciaTO> listarConferencias() throws InfraException, Exception {
		System.out
				.println("\nConferenciaServiceImpl :: listarConferencias() acionado");

		List<Conferencia> lstConfBD = null;
		List<ConferenciaTO> lstConferencias = null;

		try {
			AmmentosConnection.instance();

			Query sql = new Query(Conferencia.PERSISTENCE_DOMAIN);
			sql.appendFilter( new SqlQueryFilter("TERMINO > CURRENT_DATE") );
			sql.appendOrderFilter("termino");
			sql.setOrderingDir(Query.ORDERING_DESC);

			lstConfBD = (List<Conferencia>) Ammentos.load(Conferencia.class, sql);
			if (lstConfBD != null && !lstConfBD.isEmpty()) {
				lstConferencias = new ArrayList<ConferenciaTO>();

				ConferenciaTO to = null;
				for (Conferencia conferencia : lstConfBD) {
					to = popularTo(conferencia);
					lstConferencias.add(to);
				}
			}
		}
		catch (PersistenceException e) {
			System.err.println(e.getStackTrace().toString());
			throw new InfraException("InfraException: " + e.getMessage());
		}
		return lstConferencias;
	}

	/**
	 * 
	 */
	public List<SessoesConferenciaTO> obterSessoes(ConferenciaTO conferencia)
			throws InfraException, Exception {
		SessoesConferenciaTO[] sessoes = null;
		return null;
	}

	/**
	 * 
	 * @param Conferencia
	 * @return ConferenciaTO
	 */
	private ConferenciaTO popularTo(Conferencia conferencia) throws Exception {
		System.out
				.println("\nConferenciaServiceImpl :: popularTo() acionado");

		ConferenciaTO to = new ConferenciaTO();
		to.setDescricao( conferencia.getDescricao() );
		to.setEndereco( conferencia.getEndereco() );
		to.setId( conferencia.getId() );
		to.setInicio( conferencia.getInicio() );
		to.setInicioChamadaTrabalhos( conferencia.getInicioChamadaTrabalhos() );
		to.setTermino( conferencia.getTermino() );
		to.setTerminoChamadaTrabalhos( conferencia.getTerminoChamadaTrabalhos() );
		to.setTitulo( conferencia.getTitulo() );

		to.setDataInicioFormatada( sdf.format( conferencia.getInicio() ) );
		to.setDataInicioChamadaFormatada( sdf.format( conferencia.getInicioChamadaTrabalhos() ));
		to.setDataTerminoFormatada( sdf.format( conferencia.getTermino() ) );
		to.setDataTerminoChamadaFormatada( sdf.format( conferencia.getTerminoChamadaTrabalhos() ));

/*		CentroConvencao centro = conferencia.getCentroConvencao();

		CentroConvencaoTO centroTo = new CentroConvencaoTO();
		centroTo.setEndereco( centro.getEndereco() );
		centroTo.setFax( centro.getFax() );
		centroTo.setFone( centro.getFone() );
		centroTo.setId( centro.getId() );
		centroTo.setNome( centro.getNome() );
		//
		centroTo.setSalas( null );
		centroTo.setStands( null );

		to.setCentroConvencao( centroTo );

		List<SessoesConferenciaTO> sessoes = null;
		
		to.setSessoesConferencia( sessoes );*/

		return to;
	}
}